package Levels 
{
	import flash.display.MovieClip;
	import Objetos.Fundos.Fundo1;
	import Objetos.Fundos.Fundo2;
	import Objetos.Inimigos.Chefe1;
	import Objetos.Inimigos.Inimigo1;
	import Objetos.Inimigos.Meteoro;
	import Objetos.Inimigos.TiroInimigo1;
	import Objetos.Nave;
	import Objetos.Tiro;
	import Objetos.Upgrades.Upgrade1;
	import Objetos.Upgrades.Upgrade2;
	import Objetos.Vida;
	/**
	 * ...
	 * @author Gabriel Ribeiro
	 */
	public class Level extends MovieClip
	{
		protected var gameConstructor			:MovieClip;
		protected var MC_fundo1					:Fundo1;
		protected var MC_fundo2					:Fundo2;
		protected var MC_nave					:Nave;
		protected var MC_tiro					:Tiro;
		protected var MC_tiroI					:TiroInimigo1;
		protected var MC_met					:Meteoro;
		protected var MC_inimigo1				:Inimigo1;
		public static var MC_chefe1				:Chefe1;
		protected var MC_vida					:Vida;
		protected var MC_up1					:Upgrade1;
		protected var MC_up2					:Upgrade2;
		
		public static var dano					:uint;
		protected var arma						:uint;
		protected var removerTiro				:uint;
		
		public static var BO_TirosI				:Boolean;
		
		public static var AR_tiros				:Array = new Array();
		public static var AR_met				:Array = new Array();
		public static var AR_inimigos			:Array = new Array();
		public static var AR_tirosInimigos		:Array = new Array();
		public static var AR_tirosChefe1		:Array = new Array();
		public static var AR_fundos				:Array = new Array();
		
		
		public function Level() 
		{
			dano = 1;
			arma = 1;
			removerTiro = 0;
		}
		
		public function update():void
		{
			for (var f:int = 0; f < AR_fundos.length; f++)
			{
				AR_fundos[f].update()
			}
			
			for (var u:int = 0; u < AR_tirosInimigos.length; u++)
			{
				if (AR_tirosInimigos[u].hitTestObject(MC_nave))
				{
					Main.getInstance().MC_tela.removeChild(AR_tirosInimigos[u])
					AR_tirosInimigos.splice(u,1)	
					dano ++
							
					if (arma >= 2)
					{
						arma --
					}
				}
			}
				
			for each(MC_tiroI in AR_tirosInimigos)
			{
				MC_tiroI.update();
			}
			
			for each (MC_tiro in AR_tiros)
			{
				MC_tiro.update();
				MC_tiro.gotoAndStop(arma)
			}
			
			for each (MC_inimigo1 in AR_inimigos)
			{
				MC_inimigo1.update();
			}
			
			
			for (var k:int = 0; k < AR_met.length; k++)
			{
				if (AR_met[k] != null)
				{
					AR_met[k].update();
					
					
					for (var j:int = 0; j < AR_tiros.length; j++)
					{
						if (AR_tiros[j] != null)
						{
							if (AR_tiros[j].y  <= 0 - AR_tiros[j].height)
							{
								Main.getInstance().MC_tela.removeChild(AR_tiros[j]);
								AR_tiros.splice(j, 1);
							}
							
							else if (AR_met[k] != null)
							{
								switch(arma)
								{
									case 1:
									if (AR_tiros[j].hitTestObject(AR_met[k]))
									{
										Main.getInstance().MC_tela.removeChild(AR_tiros[j])
										AR_tiros.splice(j,1)
										
										Main.getInstance().MC_tela.removeChild(AR_met[k])
										AR_met.splice(k, 1)	
									}
									
									case 2:
									if (AR_tiros[j] != null && AR_met[k] != null && AR_tiros[j].hitTestObject(AR_met[k]))
									{
										Main.getInstance().MC_tela.removeChild(AR_met[k])
										AR_met.splice(k, 1)
										
										removerTiro ++
									}
								}
							}
							
							
							if (removerTiro >= 3)
							{
								Main.getInstance().MC_tela.removeChild(AR_tiros[j])
								AR_tiros.splice(j,1)
							}
						}
						
						for (var i:int = 0; i < AR_inimigos.length; i++)
						{
							if (AR_met[k] != null)
							{
								if (AR_inimigos[i] != null && AR_tiros[j] != null)
								{
									if (AR_tiros[j].hitTestObject(AR_inimigos[i]))
									{
										Main.getInstance().MC_tela.removeChild(AR_inimigos[i])
										AR_inimigos.splice(i, 1)
										BO_TirosI = false
										
									}
								}
							}
						}
						
						
					}
					
					if (AR_met[k] != null)
					{
						if (AR_met[k].y  >= 600 + AR_met[k].height/2)
						{
							Main.getInstance().MC_tela.removeChild(AR_met[k]);
							AR_met.splice(k, 1);
						}
					}
				}
				
				if (AR_met[k] != null)
				{
					if (AR_met[k].hitTestObject(MC_nave))
					{
						Main.getInstance().MC_tela.removeChild(AR_met[k])
						AR_met.splice(k,1)	
						dano ++
						
						if (arma >= 2)
						{
							arma --
						}
					}
				}
				
				for (var t:int = 0; t < AR_tirosChefe1.length; t++)
				{
					//AR_tirosChefe1[t].update()
					if (AR_tirosChefe1[t].hitTestObject[MC_nave])
					{
						trace ("acertou")
						
						/*dano ++;
						Main.getInstance().MC_tela.removeChild(AR_tirosChefe1[t])
						AR_tirosChefe1.splice(t,1)*/	
					}
				}
			}
			
			MC_vida.gotoAndStop(dano)
			MC_nave.gotoAndStop(arma)
			
			MC_nave.update();
			MC_inimigo1.update();
			
			if (MC_up1 != null)
			{
				MC_up1.update();
				
				if (MC_up1.hitTestObject(MC_nave))
				{
					Main.getInstance().MC_tela.removeChild(MC_up1)
					MC_up1 = null;
					
					if (arma == 1)
					{	
						arma ++
					}
				}
				
				if (MC_up1 != null && MC_up1.y >= 600)
				{
					Main.getInstance().MC_tela.removeChild(MC_up1)
					MC_up1 = null;
				}
			}
			
			if (MC_up2 != null)
			{
				MC_up2.update();
				
				if (MC_up2.hitTestObject(MC_nave))
				{
					Main.getInstance().MC_tela.removeChild(MC_up2)
					MC_up2 = null;
					
					if (dano > 1)
					{
						dano --
					}
				}
				
				else if (MC_up2.y >= 600)
				{
					Main.getInstance().MC_tela.removeChild(MC_up2)
					MC_up2 = null;
				}
			}
		}
		
	}

}